package cn;
// import cn.DuLinkList;


public class LinkStack implements IStack{
    private Node top;//栈顶元素的引用

    @Override
    public void clear() {//将栈置空
        top=null;

    }

    @Override
    public boolean isEmpty() {//判断链栈是否为空
        
        return top==null;
    }

    @Override
    public int length() {//求链栈的长度
        Node p=top;//初始化，p指向栈顶元素，length为计数器
        int length =0;
        while(p!=null){
            p=p.next;
            ++length;
        }
        return length;
    }

    @Override
    public Object peek() {//取出栈顶元素并返回其值
        if(!isEmpty()){
            return top.date;
        }
        return null;
    }

    @Override
    public void push(Object x) throws Exception {//入栈
        Node p=new Node(x);//构造一个新结点
        p.next=top;
        top=p;
    }

    @Override
    public Object pop() {//出栈
        if (isEmpty()){
            return null;
        }else{
            Node p=top;//p指向被删结点
            top=top.next;//修改链指针，使栈顶结点从链栈中移去
            return top;//返回栈顶元素的数据的值
        }
        
    }
    public void display(){
        Node p=top;//初始化，p指向栈顶元素
        while(p!=null){//输出所有非空结点元素值
            System.out.println(p.date.toString()+"");
            p=p.next;//p指针后移
        }
    }
    
}
